package com.webserver.http;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 该类用于存放所有HTTP协议规定的内容
 * @author pc
 *
 */
public class HttpContext {
	/**
	 * 回车符
	 */
	public static final char CR = 13;
	/**
	 * 换行符
	 */
	public static final char LF = 10;
	
	/**
	 *	保存所有资源后缀与对应的Content-Type的值
	 *	key:资源的后缀名
	 *	value:Content-Type的值 
	 */
	private static Map<String,String> mimeMapping = new HashMap<>();
	
	static {
		//初始化所有静态资源		
		initMimeMapping();
	}
	
	private static void initMimeMapping() {
		/*
		 * 通过解析./conf/web.xml文件，将所有的类型初始化
		 * 1:解析./conf/web.xml
		 * 2:将根标签下所有名为<mime-mapping>的标签获取到
		 * 3:遍历每一个<mime-mapping>标签，并将其子标签:
		 *   <extension>中间的文本作为key
		 *   <mime-type>中间的文本作为value
		 *   put到mimeMapping这个Map中完成初始化工作。
		 * 完成后该mimeMapping中会有1000多个元素
		 */
		try {
			SAXReader reader = new SAXReader();
			Document doc = reader.read("./conf/web.xml");
			Element root = doc.getRootElement();//<web-app>
			List<Element> list = root.elements("mime-mapping");
			//遍历每一个<mime-mapping>
			for(Element e : list) {
				//获取子标签<extension>中间的文本
				String key = e.elementText("extension");
				String value = e.elementText("mime-type");
				mimeMapping.put(key, value);
			}		
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(mimeMapping.size());//1011
	}
	/**
	 * 根据资源的后缀名获取对应的Content-Type的值
	 * @param ext
	 * @return
	 */
	public static String getMimeType(String ext) {
		return mimeMapping.get(ext.toLowerCase());
	}
	
	public static void main(String[] args) {
		String type = getMimeType("mp3");
		System.out.println(type);//null
	}
	
}


















